1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
|
#include "stdafx.h" #include "windows.h"
bool injectDll(DWORD dwPid, const char* pszDllPath);
int main() { DWORD dwPid; char szDllPath[MAX_PATH] = { "C:\\Users\\Administrator\\source\\repos\\VEH_Dll\\Debug\\VEH_Dll.dll"};
printf("输入要注入到的进程PID:"); scanf_s("%d[*]", &dwPid);
injectDll(dwPid, szDllPath); return 0; }
bool injectDll(DWORD dwPid, const char* pszDllPath) { bool bRet = false; HANDLE hProcess = 0; HANDLE hRemoteThread = 0; LPVOID pRemoteBuff = NULL; SIZE_T dwWrite = 0; DWORD dwSize = 0;
hProcess = OpenProcess( PROCESS_CREATE_THREAD | PROCESS_VM_OPERATION | PROCESS_VM_WRITE, FALSE, dwPid);
if (hProcess == NULL) { printf("打开进程失败,可能由于本程序的权限太低,请以管理员身份运行再尝试\n"); goto _EXIT; }
pRemoteBuff = VirtualAllocEx( hProcess, NULL, 64*1024, MEM_COMMIT, PAGE_EXECUTE_READWRITE ); if (pRemoteBuff == NULL) { printf("在远程进程上开辟空降失败\n"); goto _EXIT; }
dwSize = strlen(pszDllPath) + 1; WriteProcessMemory( hProcess, pRemoteBuff, pszDllPath, dwSize, &dwWrite );
if (dwWrite != dwSize) { printf("写入Dll路径失败\n"); goto _EXIT; }
hRemoteThread = CreateRemoteThread( hProcess, 0, 0, (LPTHREAD_START_ROUTINE)LoadLibraryA, pRemoteBuff, 0, 0);
WaitForSingleObject(hRemoteThread, -1);
bRet = true;
_EXIT: VirtualFreeEx(hProcess, pRemoteBuff, 0, MEM_RELEASE); CloseHandle(hProcess);
return bRet; }
|